<?php
class Partido extends AppModel {

	var $name = 'Partido';
	var $primaryKey = 'partido';
	
	//The Associations below have been created with all possible keys, those that are not needed can be removed
	var $belongsTo = array(
			'Sala' => array('className' => 'Sala',
								'foreignKey' => 'sala_id',
								'conditions' => '',
								'fields' => '',
								'order' => ''
			),
			'Owner' => array('className' => 'User',
								'foreignKey' => 'user_id',
								'conditions' => '',
								'fields' => '',
								'order' => ''
			),
			'Torneo' => array('className' => 'Torneo',
								'foreignKey' => 'torneo_id',
								'conditions' => '',
								'fields' => '',
								'order' => ''
			),
			'Equipovisitante' => array('className' => 'Equipo',
								'foreignKey' => 'equipovisitante_id',
								'conditions' => '',
								'fields' => '',
								'order' => ''
			),
			'Equipolocal' => array('className' => 'Equipo',
								'foreignKey' => 'equipolocal_id',
								'conditions' => '',
								'fields' => '',
								'order' => ''
			)
	);

	var $hasMany = array(
			'Jugada' => array('className' => 'Jugada',
								'foreignKey' => 'partido_id',
								'dependent' => false,
								'conditions' => '',
								'fields' => '',
								'order' => '',
								'limit' => '',
								'offset' => '',
								'exclusive' => '',
								'finderQuery' => '',
								'counterQuery' => ''
			),
			'PartidosUser' => array('className' => 'PartidosUser',
								'foreignKey' => 'partido_id',
								'dependent' => false,
								'conditions' => '',
								'fields' => '',
								'order' => '',
								'limit' => '',
								'offset' => '',
								'exclusive' => '',
								'finderQuery' => '',
								'counterQuery' => ''
			),
			'UsersObservaPartido' => array('className' => 'UsersObservaPartido',
								'foreignKey' => 'partido_id',
								'dependent' => false,
								'conditions' => '',
								'fields' => '',
								'order' => '',
								'limit' => '',
								'offset' => '',
								'exclusive' => '',
								'finderQuery' => '',
								'counterQuery' => ''
			)
	);

	var $hasAndBelongsToMany = array(
			'HABTMPartidosUser' => array('className' => 'User',
						'joinTable' => 'partidos_users',
						'foreignKey' => 'partido_id',
						'associationForeignKey' => 'user_id',
						'unique' => true,
						'conditions' => '',
						'fields' => '',
						'order' => '',
						'limit' => '',
						'offset' => '',
						'finderQuery' => '',
						'deleteQuery' => '',
						'insertQuery' => ''
			)/*,
			'UsersObserva' => array('className' => 'User',
						'joinTable' => 'users_observa_partidos',
						'foreignKey' => 'partido_id',
						'associationForeignKey' => 'users_observa_id',
						'unique' => true,
						'conditions' => '',
						'fields' => '',
						'order' => '',
						'limit' => '',
						'offset' => '',
						'finderQuery' => '',
						'deleteQuery' => '',
						'insertQuery' => ''
			)*/
	);

/*Verifica si actualmente el usuario pertenece a un partido verificando la tabla partidosUser con estado<10
	PARAMETROS:
 $userId: id del usuario a verificar
	Retorna:
 0: No
 array(): corresponde al partido a que pertenece el usuario
 Partidos de la Sala
*/
	function tieneOtrosPartidos($userId){
		// estado 1 quiere decir que el partido esta en espera y ya ha sido creado y que el partido corresponda a una sala
		$partidosUsers=$this->PartidosUser->find('first',array('conditions'=>array('PartidosUser.user_id ='=> $userId, 'PartidosUser.estado <'=> 10, 'Partido.sala_id >'=>0)));
		//print_r($partidosUsers);
		if($partidosUsers){
			return $partidosUsers;
		}else{
			return 0;
		}
	}
	
/*Verifica si el usuario tiene permiso para unirse a un partido o observar
	Parametros:
$userId: id del user a verificar
$partidoId: partido para unirse o observar
$tipo: 1->Unirse 2->Observar
	Retorno:
1: Si puede realizar la accion
0: No puede realizar la accion*/
	function controlarPermiso($userId, $partidoId, $tipo){
		$partido=$this->findByPartido($partidoId);
		if($tipo == 1){// para unirse como jugador
			if($partido['Partido']['rival']==1){ //Jugador vs Jugador
				if($partido['Partido']['cantmaxusuarios']>$partido['Partido']['cantusuarios']){
					//se aumenta la cantidad de usuarios en el partido
					$this->id = $partido['Partido']['partido'];
					$this->saveField('cantusuarios',$partido['Partido']['cantusuarios']+1);
					if($partido['Partido']['cantmaxusuarios']==$partido['Partido']['cantusuarios']+1){
						$this->id = $partido['Partido']['partido'];
						$this->saveField('estado',3);//Partido completo y listo para jugar	
					}
					return 1;
				}else{
					//no puede unirse como jugador
					return 0;
				}
			}else{
				return 0; 
			}
		}else{ //para observar
			if($partido['Partido']['observador']==1){
				//se aumenta la cantidad de observadores en el partido
				if($partido['Partido']['estado']==4){ //si empezo
					$this->id = $partidoId;
					if($this->saveField('cantobservadores',($partido['Partido']['cantobservadores']+1))){
						return 1;
					}else{
						return 0;
					}
				}
			}else{
				return 0;
			}
		}
	}
	
/*
 FALTA MODIFICAR!! POR EL MOMENTO TRAE TODOS LOS PARTIDOS CON ESTADO 1
 Trae todos los partidos jugados por el usuario con $userId
segun $tipo:
	1)Ganados	2) Perdidos	3)Empatados
Segun el atributo "estado" de la tabla partidos:
	1)Aun no empezo	2) Jugando	3) Termino correctamente
Segun el atributo "estado" de la tabla Partidos_users:
	10)Ganador	11) Perdio	12)Empatado
*/	
	function estadisticaPartidos($userId, $tipo=null, $cantidad){
		$partidosParticipado=null;
		if($tipo==0){//TODOS
			$partidosParticipados=$this->PartidosUser->find('all',array('conditions'=>array('PartidosUser.user_id ='=> $userId, 'Partido.estado >'=> 9),'order' => array('Partido.fechahoraini DESC'),'limit'=> $cantidad));
		}
		elseif($tipo==1){//GANADOS
			$partidosParticipados=$this->PartidosUser->find('all',array('conditions'=>array('PartidosUser.user_id ='=> $userId, 'PartidosUser.estado ='=> 12),'order' => array('Partido.fechahoraini DESC'),'limit'=> $cantidad));
		}
		elseif($tipo==2){// PERDIDOS
			$partidosParticipados=$this->PartidosUser->find('all',array('conditions'=>array('PartidosUser.user_id ='=> $userId, 'PartidosUser.estado ='=> 14),'order' => array('Partido.fechahoraini DESC'),'limit'=> $cantidad));
		}else{//EMPATADOS
			$partidosParticipados=$this->PartidosUser->find('all',array('conditions'=>array('PartidosUser.user_id ='=> $userId, 'PartidosUser.estado ='=> 13),'order' => array('Partido.fechahoraini DESC'),'limit'=> $cantidad));
		}
		$partidos='';
		if($partidosParticipados!=null){
			foreach($partidosParticipados as $partidosParticipado){
				$partidos[$partidosParticipado['Partido']['partido']]=$this->findByPartido($partidosParticipado['Partido']['partido']);
			}
		}
		return $partidos;
		//print_r($partidos);
	}
	
	
	
/* Devuelve los ultimos partidos finalizados por el usuario segun una cantidad.
Partido.Estado > 4 quiere decir que ha finalizado*/
	function listaUltimosCantidad($cantidad, $userId){
		$partidosParticipados=$this->PartidosUser->find('all',array('conditions'=>
		array('PartidosUser.user_id ='=> $userId, 'Partido.estado >'=> 4),'order' => array('Partido.fechahorafin DESC'),'limit' => $cantidad));
		
		$partidos='';
		if($partidosParticipados!=null){
			foreach($partidosParticipados as $partidosParticipado){
				$partidos[$partidosParticipado['Partido']['partido']]=$this->find('first',array('conditions'=> array('Partido.partido'=>$partidosParticipado['Partido']['partido'])));
			}
		}
		return $partidos;
	}
	
/* Dada la lista de salas en $salas, obtiene la cantidad de partidos activos en cada $sala de $salas
*/
	function cantidadPartidosActivos($salas){
		$count = null;
		foreach($salas as $sala){
			$count[$sala['Sala']['sala']]=$this->find('count',array('conditions'=>array('Partido.estado <'=> 10, 'Partido.sala_id '=>$sala['Sala']['sala'])));
		}
		return $count;
	}


	function datosPartido($partidoId)
	{	//aqui traigo todos los datos que necesito del partido para realizar cada juego Es posible que este incompleto aun!
		$datosPartido=$this->find('first',array('conditions' => array('Partido.partido =' => $partidoId )));
		//$datosPartido=$this->find('first', array('fields'=>array('Partido.nivel_id','Partido.torneo_id','Partido.modalidad_id','Partido.empieza','Partido.estado','Partido.rival','Partido.tiempomaxjugada','Partido.golesfin','Partido.relojespera','Partido.user_id'),'conditions' => array('Partido.partido =' => $partidoId )));
		//print_r($datosPartido);
		return $datosPartido;
		
	}
	/*el parametroBusqueda puede ser count Cantidad de usuarios relacionados al partido
					all todos los integrantes del partido
					first solo el primer usuario q aparezca en la base de datos*/
	function datosPartidosUser($partidoId,$parametroBusqueda){
		$datosPartidosUser=$this->PartidosUser->find($parametroBusqueda,array('conditions'=>array('PartidosUser.partido_id ='=> $partidoId, 'PartidosUser.estado <'=> 10)));
		//print_r($partidosUsers);
		return $datosPartidosUser;
		
	}
	
	/*function determinarTurno($partidoId,$userId){
		$partidosUsers=$this->PartidosUser->find('first',array('conditions'=>array('PartidosUser.user_id <>'=> $userId, 'PartidosUser.estado <'=> 10, 'PartidosUser.partido_id =' => $partidoId )));
		//print_r($partidosUsers);
		if($partidosUsers){
			return $partidosUsers;
		}else{
			return 0;
		}
	}*/
	
	function partidosDeTorneo($torneoId, $userId){
		//traer todos los partidos del torneo.
		$partidos=$this->find('all', array('conditions'=>array('Partido.torneo_id'=>$torneoId, 'Partido.estado <'=>10)));
		//print_r($partidos);
		$misPartidos=array();
		foreach ($partidos as $partido){// para cada partido del torneo
			//print_r($partido);
			foreach ($partido['PartidosUser'] as $partidoUser){ //para cada jugador del partido
				if($partidoUser['user_id']==$userId){//si corresponde al user_id se almacena su estado
					$misPartidos[$partidoUser['partido_id']]=$partidoUser['estado'];
				}
			}
		}
		return $misPartidos;
	}
	
	
}
?>